[update] AWS Elemental MediaConvertでJobの検索ができるようになりました!

[update] AWS Elemental MediaConvertでJobの検索ができるようになりました!

MediaConvertで入力ファイル名の一部をクエリとしてJobを検索できるようになりました。マネジメントコンソールやAPIから利用可能で、StatusやQueueでのフィルタもできます。検索対象が直近3ヶ月間のJobである点に注意しましょう。
Clock Icon2024.07.29

はじめに

清水です。ブロードキャストグレードの機能を備えたファイルベースの動画変換サービスであるAWS Elemental MediaConvertで入力ファイル名によるJobの検索ができるようになりました!AWS What's Newへの投稿は現時点で確認できていませんが、MediaConvert User GuideDocment historyに2024/06/20付けで更新があります。

sj01
引用元: Document history for User Guide - MediaConvert

リンク先のUser Guide内、Working with jobs - MediaConvertの項目では Searching for jobs のTopicsが追加されていますね。

sj02
引用元: Working with jobs - MediaConvert https://docs.aws.amazon.com/mediaconvert/latest/ug/working-with-jobs.html

またAWS API Changesのサイトによると、2024/06/14付けでSearchJobsというAPIが追加されていることが確認できます。

「This release adds the ability to search for historical job records within the management console using a search box and/or via the SDK/CLI with partial string matching search on input file name.」ということで、このAPIがまさにJob検索機能に該当しますね。

本エントリではこのMediaConvertの新機能、Search jobsについて実際に試してみたのでまとめてみます。

MediaConvertのJobをマネジメントコンソールから検索してみた

入力ファイルのURLでJobが検索できる

まずはAWSマネジメントコンソールから、MediaConvertのJob検索機能を使ってみます。MediaConvertのページに遷移し、左上のハンバーガーボタン(三)をクリックして機能メニューを表示させてみます。一番下に Search (日本語であれば 検索 ) の項目が見つかりますね!

sj03

Search のページに移動してみると以下のように、これまで実行したJobがずらりとならんでいます。

sj04

検索条件となる入力ファイル名をクエリとして検索を実行してみましょう。以下を Input filename filter の欄に入力、右上の[Search]ボタンを押下します。

  • s3://my-bucket/mediaconvert-input/inokashira-line.mov

sj05

検索結果として、1つのJobが表示されました。

sj06

Job IDのリンク文字列をクリックすると、Job Summary画面に遷移します。

sj07

検索クエリとして指定したファイル名が入力となっているJobが検索結果として表示されたことが確認できました!

検索クエリはファイル名やその一部でもOK

上記の例では入力ファイルをフルパスでURLすべて指定していますが、一部のみでも検索可能です。以下はPC011010.MOVというクエリで検索してみました。検索結果としてPC011010.MOVというファイル名を入力として実行したJobが現れましたね。

sj08

sj09

また入力ファイルの文字列(Job作成時、マネジメントコンソールのInput file URLの項目で指定するもの。FileInput)が検索対象となり、部分一致でも結果に現れるようです。MediaConvertは入力ソースとしてS3のほかHTTP/HTTPSも利用可能です。([アップデート] AWS Elemental MediaConvertがHTTPSからのファイル入力に対応していました! | DevelopersIO)入力ファイル文字列の他の場所にhttpsを使っていないことが前提にはなりますが、クエリをhttpsとすれば入力にHTTPSソースを使用したJobを検索することも可能です。

sj10

sj11

StatusやQueueでのフィルタも可能

マネジメントコンソールのSearchページで表示がありますが、StatusやQueueで検索結果をフィルタすることも可能です。

StatusとしてはSubmittedProgressingCompleteCanceledErrorが選択できます。QueueはDefaultと、ほかに作成済みのQueueがあればそれが選択可能となります。(スクリーンショットは以前、MediaConvertの高速トランスコーディングのアップデートの際、検証用に作成したQueueになります。([アップデート] AWS Elemental MediaConvertで高速トランスコーディングが利用可能になりました [最大25倍スピードアップ!] | DevelopersIO))

sj12

sj13

検索対象期間は3ヶ月間である点に注意

大変便利なJobの検索機能ですが、検索対象が直近3ヶ月以内であることに注意しましょう。User GuideによるとJobの作成から3ヶ月経過すると、自動的にJobの記録は消去されてしまうとのことです。

sj14
引用元: Searching for jobs - Working with jobs - MediaConvert

2024年5月ごろのJobは見つからない?

また、こちらはUser Guideなどでの記載は見つからなかったのですが、現時点で検索対象となるのは2024年6月ごろ以降に作成されたJobで、2024年5月ごろ以前のJobは検索対象とならないようでした。

期間について正確な表現ができておらず恐縮なのですが、私の検証用AWSアカウントでは、2024/05/28に作成したJobはJobs一覧ページには現れるも、Searchのページには表示されていません。2024/05/28に作成したJobの次のJobが2024/06/18に作成したものなのですが、こちらは表示される、というぐあいでした。

sj15

sj16

アップデートがAWS What's Newに投稿された2024/06/20です。これ以降に作成されたJobは3ヶ月間検索対象に現れるはずですが、それ以前に作成したJobの扱いについては注意しましょう。

MdiaConvertのJobをAWS CLIで検索してみた

Jobの検索機能、もちろんAWS CLI(ないしAPI経由)でも利用可能です。実際に確認してみましょう。

本エントリ内のAWS CLIの実行にはAWS CloudShellを使用しました。以下の環境となります。

[cloudshell-user@ip-10-130-33-125 ~]$ aws --version
aws-cli/2.17.15 Python/3.11.9 Linux/6.1.96-102.177.amzn2023.x86_64 exec-env/CloudShell exe/x86_64.amzn.2023

aws mediaconvert search-jobsサブコマンドを使用します。マネジメントコンソールで確認したように、入力ファイル名を検索クエリとする(--input-file)ほか、Queue(--queueu)やStatus(--status)でフィルタリングすることが可能です。また--orderオプションで並べ替えの順序も指定することができます。

$ aws mediaconvert search-jobs \
  --input-file <value>
  --order [ASCENDING|DESCENDING]
  --queue <value>
  --status <value>

以下、実際の実行結果です。返り値として検索結果となるJobの情報がまるっと返ってきます。

[cloudshell-user@ip-10-130-33-125 ~]$ aws mediaconvert search-jobs \
>   --input-file IMG_4657.MOV
{
    "Jobs": [
        {
            "AccelerationSettings": {
                "Mode": "DISABLED"
            },
            "AccelerationStatus": "NOT_APPLICABLE",
            "Arn": "arn:aws:mediaconvert:ap-northeast-1:123456789012:jobs/17xxxxxxxxxxx-xxxxvd",
            "BillingTagsSource": "JOB",
            "ClientRequestToken": "17xxxxxxxxxxx-xxxxxc",
            "CreatedAt": "2024-07-26T12:58:14+00:00",
            "Id": "17xxxxxxxxxxx-xxxxvd",
            "Messages": {
                "Info": [],
                "Warning": []
            },
            "OutputGroupDetails": [
                {
                    "OutputDetails": [
                        {
                            "DurationInMs": 30830,
                            "VideoDetails": {
                                "HeightInPx": 720,
                                "WidthInPx": 1280
                            }
                        }
                    ]
                }
            ],
            "Priority": 0,
            "Queue": "arn:aws:mediaconvert:ap-northeast-1:123456789012:queues/Default",
            "Role": "arn:aws:iam::123456789012:role/ElementalMediaConvert-role",
            "Settings": {
                "FollowSource": 1,
                "Inputs": [
                    {
                        "AudioSelectors": {
                            "Audio Selector 1": {
                                "DefaultSelection": "DEFAULT"
                            }
                        },
                        "FileInput": "s3://my-bucket/mediaconvert-input/IMG_4657.MOV",
                        "TimecodeSource": "ZEROBASED",
                        "VideoSelector": {}
                    }
                ],
                "OutputGroups": [
                    {
                        "Name": "File Group",
                        "OutputGroupSettings": {
                            "FileGroupSettings": {
                                "Destination": "s3://content-source-xxxxxxxx/output/"
                            },
                            "Type": "FILE_GROUP_SETTINGS"
                        },
                        "Outputs": [
                            {
                                "AudioDescriptions": [
                                    {
                                        "AudioSourceName": "Audio Selector 1",
                                        "AudioType": 0,
                                        "AudioTypeControl": "FOLLOW_INPUT",
                                        "CodecSettings": {
                                            "AacSettings": {
                                                "AudioDescriptionBroadcasterMix": "NORMAL",
                                                "Bitrate": 160000,
                                                "CodecProfile": "LC",
                                                "CodingMode": "CODING_MODE_2_0",
                                                "RateControlMode": "CBR",
                                                "RawFormat": "NONE",
                                                "SampleRate": 48000,
                                                "Specification": "MPEG4"
                                            },
                                            "Codec": "AAC"
                                        },
                                        "LanguageCodeControl": "FOLLOW_INPUT"
                                    }
                                ],
                                "ContainerSettings": {
                                    "Container": "MP4",
                                    "Mp4Settings": {
                                        "CslgAtom": "INCLUDE",
                                        "FreeSpaceBox": "EXCLUDE",
                                        "MoovPlacement": "PROGRESSIVE_DOWNLOAD"
                                    }
                                },
                                "Extension": "mp4",
                                "Preset": "System-Generic_Hd_Mp4_Avc_Aac_16x9_Sdr_1280x720p_30Hz_5Mbps_Qvbr_Vq9",
                                "VideoDescription": {
                                    "AfdSignaling": "NONE",
                                    "AntiAlias": "ENABLED",
                                    "CodecSettings": {
                                        "Codec": "H_264",
                                        "H264Settings": {
                                            "AdaptiveQuantization": "HIGH",
                                            "CodecLevel": "AUTO",
                                            "CodecProfile": "HIGH",
                                            "DynamicSubGop": "ADAPTIVE",
                                            "EntropyEncoding": "CABAC",
                                            "FieldEncoding": "PAFF",
                                            "FlickerAdaptiveQuantization": "ENABLED",
                                            "FramerateControl": "SPECIFIED",
                                            "FramerateConversionAlgorithm": "DUPLICATE_DROP",
                                            "FramerateDenominator": 1001,
                                            "FramerateNumerator": 30000,
                                            "GopBReference": "ENABLED",
                                            "GopClosedCadence": 1,
                                            "GopSize": 2.0,
                                            "GopSizeUnits": "SECONDS",
                                            "HrdBufferInitialFillPercentage": 90,
                                            "HrdBufferSize": 10000000,
                                            "InterlaceMode": "PROGRESSIVE",
                                            "MaxBitrate": 5000000,
                                            "MinIInterval": 0,
                                            "NumberBFramesBetweenReferenceFrames": 3,
                                            "NumberReferenceFrames": 3,
                                            "ParControl": "SPECIFIED",
                                            "ParDenominator": 1,
                                            "ParNumerator": 1,
                                            "QualityTuningLevel": "MULTI_PASS_HQ",
                                            "QvbrSettings": {
                                                "MaxAverageBitrate": 4000000,
                                                "QvbrQualityLevel": 9
                                            },
                                            "RateControlMode": "QVBR",
                                            "RepeatPps": "DISABLED",
                                            "SceneChangeDetect": "ENABLED",
                                            "Slices": 2,
                                            "SlowPal": "DISABLED",
                                            "Softness": 0,
                                            "SpatialAdaptiveQuantization": "ENABLED",
                                            "Syntax": "DEFAULT",
                                            "Telecine": "NONE",
                                            "TemporalAdaptiveQuantization": "ENABLED",
                                            "UnregisteredSeiTimecode": "DISABLED"
                                        }
                                    },
                                    "ColorMetadata": "INSERT",
                                    "DropFrameTimecode": "ENABLED",
                                    "Height": 720,
                                    "RespondToAfd": "NONE",
                                    "ScalingBehavior": "DEFAULT",
                                    "Sharpness": 100,
                                    "TimecodeInsertion": "DISABLED",
                                    "VideoPreprocessors": {
                                        "Deinterlacer": {
                                            "Algorithm": "INTERPOLATE",
                                            "Control": "NORMAL",
                                            "Mode": "DEINTERLACE"
                                        }
                                    },
                                    "Width": 1280
                                }
                            }
                        ]
                    }
                ],
                "TimecodeConfig": {
                    "Source": "ZEROBASED"
                }
            },
            "Status": "COMPLETE",
            "StatusUpdateInterval": "SECONDS_60",
            "Timing": {
                "FinishTime": "2024-07-26T12:59:12+00:00",
                "StartTime": "2024-07-26T12:58:15+00:00",
                "SubmitTime": "2024-07-26T12:58:14+00:00"
            },
            "UserMetadata": {}
        }
    ]
}

必要に応じて--queryオプションで出力項目の絞り込みを行いましょう。

[cloudshell-user@ip-10-130-33-125 ~]$ aws mediaconvert search-jobs \
>   --input-file IMG_4657.MOV \
>   --query "Jobs[*].[Id, Settings.Inputs[*].FileInput]"
[
    [
        "17xxxxxxxxxxx-xxxxvd",
        [
            "s3://my-bucket/mediaconvert-input/IMG_4657.MOV"
        ]
    ]
]

まとめ

MediaConvertでJobの検索ができるようになったアップデートについてお届けしました。ある入力ファイルについて、すでに変換したかどうか確認したいとき、これまではJobの一覧から入力ファイル名を確認するといった仕組みが別途必要でした。新たに利用可能になったSearchJobs APIを使うことで、入力ファイル名からの検索が容易に行えます。ファイル名は一部のみの指定でもかまいません。またJobの状態や実行したQueueでのフィルタリングも可能です。細かなアップデートではありますが、ぐっと使いやすくなる機能かと思います。検索対象が直近3ヶ月間のJobである点に注意しつつ、上手に活用していきましょう。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.